// //mongoose 创建用户模型（相当于数据表结构），每个模型映射mongoDB的一个集合
// const mongoose = require('mongoose')

// const Schema = mongoose.Schema

// //实例化数据模板，创建Schema对象（约束，模型对象）
// //定义了这个集合里文档的结构，比如有什么字段，字段类型，字段默认值等
// //除了定义结构，还定义了文档的实力方法，静态模型方法，复合索引，中间件等
// const stuSchema = new Schema({
//     name: String,
//     age: Number,
//     gender:{
//         type: String,
//         default:'male' //定义默认类型
//     },
//     addr: String,
//     timestamps: {
//         type: Date,
//         default: Date.now //Date.now()
//     },
// test: {
//   type: String,  //类型
//   lowercase: true, // 总是将test的值转化为小写
//   uppercase: true, // 总是将test的值转化为大写
//   required:true, //设定是否必填
//   default:'star', //设定默认值
//   index：true, //设定索引值
//   unique：true, //索引值唯一
//   sparse：true, //是否启用稀疏索引
//   match：RegExp, //判断是否通过正则验证
//   enum：Array， //判断test值是否包含于enmu对应的数组中
//   min：Number， //判断对应值是否大于等于给定值
//   max：Number， //判断对应值是否小于等于给定值
//   trim:true //去除数据前后的空格
//   capped:1024 //限定大小最大为1024字节
//   validate：function，为此属性添加一个验证器函数，如demo1所示
//   get：function，//为这个属性定义一个定制的getter Object.defineProperty()。如demo2所示
//   set：function，//定义此属性的自定义设置Object.defineProperty()。如demo2所示
// }

// })

//-------- demo1
// var EmailTemplateSchema = new Schema({
// fileName: {
//         type: String,
//         trim: true,
//         default: '',
//         validate: [validateLocalStrategyProperty, 'Please fill in your first name']
//     }
// });
// //初始化对象时添加验证，验证传入的值是否合法
// var validateLocalStrategyProperty = function (property) {
//     return (!this.updated || property.length);
// };
//--------- demo1


//-------- demo2
//将传入的值四舍五入后存储
// var numberSchema = new Schema({
//   integerOnly: {
//     type: Number,
//     get: v => Math.round(v),
//     set: v => Math.round(v)，
//     require:true
//   }
// });
//--------- demo2



// //定义模型stuModle
// //mongoose.model()方法用来定义模型，参数students是数据库中集合的名称（表名），不存在就会创建
// const stuModle = mongoose.model('students', stuSchema)

// module.exports = stuModle



//-------以上模型是针对用户的，比如集合中有name，age等字段，
//-------现在封装一下模型，作为公共模型，公共方法导出来，只要传入集合名称和Schame对象即可
//参数 field-集合名称，表名
//参数 schema-Schame对象，集合里文档结构
const mongoose = require('mongoose')

const createModel = (field, schema) => {
  let tempModel = null
  const schameObject = new mongoose.Schema(schema) //实例化模型，创建Schema对象
  //生成模型
  try {
    tempModel = mongoose.model(field, schameObject)
  } catch (error) {
    tempModel = mongoose.model(field)
  }
  //导出模型
  return tempModel
} 

module.exports = createModel